#!/usr/bin/perl
#
# Este script permite obtener la lista de sesiones correctamente formateada
# comprobando si los usuarios estan o no entre los usuarios del dominio 
# etc...
#

# Argumentos...
#   1er: Lista de sesiones
#     Formato... "15626   Administrador  Administrators  test2        (192.168.1.69)"
#   2do: Lista de usuarios (un por linea)
#   3ro: Lista de grupos (uno por linea)
# Resultado ...
#   "15626#Administrador#Administrators#test2#192.168.1.69#"
#

 if ( 2 != $#ARGV ) {
    print "ERROR: Debes pasar <Lista_sesiones>  <Lista_usuarios> <Lista_grupos>\n";
    exit 4;
 }

 # Cargar el listado de usuarios de SAMBA...
 open (FILE, $ARGV[2] );
 @smbGroups=<FILE>;
 close FILE;

 open (FILE, $ARGV[1] );
 @smbUser=<FILE>;
 close FILE;

 # Abrir en modo lectura el fichero de LDAP
 open(FILE,"<". $ARGV[0]) || die ("ERROR: No puedo abrir [".$ARGV[0]."]\n");
 # Leer el fichero de LDAP...
 while ( chomp($linea=<FILE>) ) {
    if ( $linea=~m/^(\d+)\s+(\S.+\S)\s+\((\d.+\d)\)\s*$/ ) {
       $pid=$1;
       $ip=$3;

       # Ahora de la lista de cosas que quedan, vamos a extraer el login...
       @fields = split /\s+/, "$2";
       for ($i=0; ($i<$#fields)&&("" eq "$user"); $i++) {
           $start.=$separator . $fields[$i];
           if ( grep(/^$start$/, @smbUser)) {
              $user=$start; 
              for($j=$i+1; $j<$#fields ; $j++) {
                 $end=$fields[$j]. "  ";
              }
              break;
           }
           $separator=" ";
       }
       print "$pid#$user#$ip#\n"; 
    }
 }
 close FILE;
